タブ/スペースで区切られたファイルがあります。
31000BL 50014_10011
25467BL 50050_10003
47406BL 50001_10015
40831BL 50114_10006
40830BL 50114_10009
2列です。私はこれを読むためにwhileループを使います:
while read LINE; do
printf "$LINE\n"
old=($(echo $LINE | awk '{print $1}'))
new=($(echo $LINE | awk '{print $2}'))
ll=$old'^V<tab>'$new #I need to work here.
printf "$ll\n"
done < update_ids.txt
私が望む出力は
31000BL\t50014_10011\n25467BL\t50050_10003\n
リテラルタブと改行文字があります。タブおよび/または改行を使用して接続または印刷することはできません。
ベストアンサー1
私はないかなり私が正しく理解していることを確認してください。ただし、2つの列の間にリテラルタブがあることを確認したい場合は、awk
1回の呼び出しでこれを行うことができます。
awk -v OFS='\t' '{ $1=$1; print }' file >newfile
OFS
\t
出力フィールドの区切り文字をタブに設定するには、コマンドラインで設定します。を使用すると、現在のレコードが$1=$1
強制的にawk
再構成され、その後のレコードは元の区切り文字print
として使用されていたスペースがタブに置き換えられて印刷されます。
newfile
結果はリダイレクトを使用して記録されます。
または、より明示的なprintf()
呼び出しを使用してください。
awk '{ printf("%s\t%s\n", $1, $2) }' file >newfile
これは2つの列のみを処理しますが、最初のawk
プログラムは変更なしで複数の列を持つデータを処理します。
質問と関連: