6

awk を使用して、テキスト ファイルの最初の 3 つのフィールドを削除しようとしています。最初の 3 つのフィールドを削除するのは簡単です。しかし、行の残りの部分は awk によってめちゃくちゃになります。区切り文字はタブからスペースに変更されます。

これが私が試したことです:

head pivot.threeb.tsv | awk 'BEGIN {IFS="\t"} {$1=$2=$3=""; print }' 

最初の 3 つの列は適切に削除されます。問題は、出力が列 $4 $5 $6 などの間のタブがスペースに変換されてしまうことです。

更新:これが重複としてマークされた他の質問は、これより後に作成されました:日付を見てください。

4

4 に答える 4

5

最初にEDがコメントしたようにFS、awkでフィールドセパレーターとして使用する必要があります。 を定義していないため、出力にtabなります。spaceOFS

awk 'BEGIN{FS=OFS="\t"}{$1=$2=$3="";print}' file

これにより、最初の 3 つのフィールドが削除され、残りのテキストは「そのまま」残ります (先頭の 3 つのタブが表示されます)。出力で<tab>も保持されます。

awk 'BEGIN{FS=OFS="\t"}{print $4,$5,$6}' file

先頭のスペース/タブなしで出力されます。ただし、500列ある場合は、ループで実行するか、sub関数を使用するか、カットなどの他のツールを検討する必要があります.

于 2013-05-06T15:09:44.860 に答える
5

実際には、これは次のような非常に単純なカット コマンドで実行できます。

cut -f4- inFile
于 2013-05-06T15:10:47.033 に答える
0
awk '{for (i=4; i<NF; i++) printf $i " "; print $NF}'
于 2014-05-16T17:55:49.347 に答える