簡體   English   中英

如何使用bash腳本連接2個文本文件?

[英]How to join 2 text files using bash scripting?

我想結合2個文件,並在1個文件[只有2場(放在一起$4$5FILE A$2$3FILE B )是兩個文件之間的普通的事。 參見下面的期望輸出。

文件A:

X 2134 101L 12345.00 22222.00  1 10

X 2134 101L 12345.00 22222.00 11 20 

X 2134 101L 12345.00 22222.00 21 30 

X 2134 111L 77777.00 22222.00  1 10 

X 2134 111L 77777.00 22222.00 11 20 

X 2134 111L 77777.00 22222.00 21 30 

X 2134 121L 56347.00 46678.00  1 10 

X 2134 121L 56347.00 46678.00 11 20 

X 2134 121L 56347.00 46678.00 21 3

文件B:

3333 12345 22222 54367.05 34765.05

3333 34567 12235 54298.05 34568.05 

3333 77777 22222 52765.05 32567.05 

3333 55555 11111 52875.05 36547.05 

3333 56347 46678 53789.05 34566.05

結果:

3333 2134 10 12345 22222 54367.05 34765.05 

3333 NA   NA 34567 12235 54298.05 34568.05 

3333 2134 11 77777 22222 52765.05 32567.05 

3333 NA   NA 55555 11111 52875.05 36547.05 

3333 2134 12 56347 46678 53789.05 34566.05

嗨,大家好,我加一張照片,希望它能很好地描述我的要求。 感謝所需的輸出

下面的腳本將適用於上述情況。

while read line
do
value1=`echo $line |awk '{print $1}'`
value2=`echo $line |awk '{print $2}'`
value4=`echo $line |awk '{print substr($0, index($0,$3))}'`
value3=`grep $value2 fileA.txt|head -n 1|awk '{print $2" "$3}'|sed 's/1L//'`
if [ "$value3" == "" ];then
echo $value1" NA NA "$value4 >> result.txt
else
echo $value1" "$value3" "$value2" "$value4 >> result.txt
fi

done<fileB.txt

輸出:

3333 2134 10 12345 22222 54367.05 34765.05
3333 NA NA 12235 54298.05 34568.05
3333 2134 11 77777 22222 52765.05 32567.05
3333 NA NA 11111 52875.05 36547.05
3333 2134 12 56347 46678 53789.05 34566.05

PS:使用bash而不是sh運行此腳本。

awk解救!

$ awk 'NR==FNR{$4=$4+0;$5=$5+0; 
               if(!(($4,$5) in a)) a[$4,$5]=$2 FS $7;;next}
              {$2=((($2,$3) in a)?a[$2,$3]:"NA" FS "NA") FS $2}1' file{A,B}

3333 2134 10 12345 22222 54367.05 34765.05
3333 NA NA 34567 12235 54298.05 34568.05
3333 2134 10 77777 22222 52765.05 32567.05
3333 NA NA 55555 11111 52875.05 36547.05
3333 2134 10 56347 46678 53789.05 34566.05

您想從文件A中獲得多個匹配項的第一個匹配項,那么兩個文件中的字段格式都不匹配(小數點與整數)。

如果您管道到... | column -t ... | column -t

3333  2134  10  12345  22222  54367.05  34765.05
3333  NA    NA  34567  12235  54298.05  34568.05
3333  2134  10  77777  22222  52765.05  32567.05
3333  NA    NA  55555  11111  52875.05  36547.05
3333  2134  10  56347  46678  53789.05  34566.05

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM