これは私の2つのファイルです
1.txt
1
2
3
4
5
2.txt
2 a
5 3
私が受け取ったファイルよりawk -F '\t' 'NR==FNR{F1[$0];next}$1 in F1{print}' 1.txt 2.txt
2 a
5 3
しかし、私はこのようなファイルを取得したい
1
2 a
3
4
5 3
または
1 0
2 a
3 0
4 0
5 3
答え1
スペースを2.txt
もう一度タブに変換しますsed -i 's/ */\t/' 2.txt
。
awk -F '\t' '
BEGIN{OFS=FS} NR==FNR{F1[$1]=$2; next} {print $1, ($1 in F1)? F1[$1] : 0}
' 2.txt 1.txt
1 0
2 a
3 0
4 0
5 3
答え2
join
代わりに使用してくださいawk
。両方のファイルが最初のフィールドにソートされているとします(質問にあります)。
$ join -a 1 1.txt 2.txt
1
2 a
3
4
5 3
この-a 1
オプションを使用すると、ユーティリティは最初のフィールドにリンクされている行だけでなく、最初のファイルのすべての行も報告します。
欠落値をゼロでさらに置き換えるには、特定のjoin
フィールドを出力するように要求し、欠落値も置換する必要があります0
。-o 1.1,2.2
最初のファイルの最初のフィールドと2番目のファイルの2番目のフィールドが必要で、欠落している-e 0
データを次に置き換えます0
。
$ join -a 1 -o 1.1,2.2 -e 0 1.txt 2.txt
1 0
2 a
3 0
4 0
5 3
区切り文字をタブで明示的に設定するには、-t $'\t'
withを使用します。join
これにより、ユーティリティは出力にタブ文字を使用します。