1

file.txt 3列があります。

1 A B
2 C D
3 E F

#2 の最後に #1 を追加したい。結果は次のようになります。

1A
2C
3E
1B
2D
3F

私はこれをやっています

cut -f 1,2 > tmp1
cut -f 1,3 > tmp2
cat *tmp * > final_file

しかし、私は繰り返しの行を取得しています! 最終出力を次のように確認すると:

cat * | sort | uniq -d

繰り返し行がたくさんあり、プライマリ ファイルには何もありません。

誰かがこれを行う他の方法を提案できますか? 私が使用しようとしているものは複雑すぎると思います。そのため、このような奇妙な出力が得られます。

4

3 に答える 3

3
pzanoni@vicky:/tmp$ cat file.txt 
1 A B
2 C D
3 E F
pzanoni@vicky:/tmp$ cut -d' ' -f1,2 file.txt > result
pzanoni@vicky:/tmp$ cut -d' ' -f1,3 file.txt >> result
pzanoni@vicky:/tmp$ cat result 
1 A
2 C
3 E
1 B
2 D
3 F

私はバッシュを使用しています

于 2012-04-12T17:55:40.977 に答える
1

cat file.txt | awk '{print $1 $2 "\n" $1 $3};'

于 2012-04-12T17:47:02.483 に答える
1

ファイルの 1 回のパスで順序を保持します

awk '
    {print $1 $2; pass2 = pass2 sep $1 $3; sep = "\n"} 
    END {print pass2}
' file.txt

この ( cat tmp* * > final_file) が間違っている理由:

  • *tmpタイプミスだったと思います
  • この時点で、ディレクトリには「tmp1」と「tmp2」のみが含まれていると想定しています

これらのワイルドカードがどのように展開されるかを見てください。

  • tmp*「tmp1」および「tmp2」に展開されます
  • *「tmp1」および「tmp2」にも展開されます

したがって、コマンドラインはcat tmp1 tmp2 tmp1 tmp2 > final_file次のようになり、重複した行がすべて取得されます。

于 2012-04-12T18:51:53.327 に答える