
2番目のフィールドを抽出して行に置き換えたいです。
cat > temp1
1 73
2 74
3 75
私のアプローチ:
cut -f2 temp1 | tr '\n' '\t' > temp2
結果:
temp2
73 74 75
当然、行の右端にタブ区切り文字がありますが、改行文字はありません。この問題を解決する簡単な方法はありますか?
答え1
paste
代わりに使用してくださいtr
:
$ cut -f2 temp1 | paste -s
73 74 75
見えない空白を確認する
$ cut -f2 temp1 | paste -s | od -c
0000000 7 3 \t 7 4 \t 7 5 \n
0000011
答え2
cat file | cut -d' ' -f2 | xargs -n3
73 74 75
見えないすべてのスペースを確認してください。こんにちは
cat file | cut -d' ' -f4 | xargs -n3 | od -c
0000000 7 3 7 4 7 5 \n
0000011
答え3
新しい行を印刷/放出/提供する最も簡単な方法はを使用することですecho
。
生成されたファイルに新しい行を追加するのは簡単なようです。
カット-f2 temp1 | tr '\n' '\t' > temp2 エコ >> temp2
これは1行で実行できます。
{ cut -f2 temp1 | tr '\n' '\t' ; echo ; } > temp2
つまり、末尾のタブが問題にならない場合です。その場合は、それらを削除するか、生成を避ける必要があります。次のいずれかがトリックを実行します。
awk 'NR>1{printf( "%s\t",a)}{a=$2}END{print a}' temp1 >temp2
sed -n 's/[0-9]*[[:blank:]]*//;1{h;d};H;${g;y/\n/\t/;p}' temp1 >temp2
sed 's/[0-9]*[[:blank:]]*//' temp1 | paste -sd '\t' >temp2