awk
でタブ区切りフィールドファイルからいくつかの列を削除するにはどうすればよいですか?
c1 c2 c3 ..... c60
たとえば、列を削除しますbetween 3 and 29。
これは、cut
コマンドの目的です。
cut -f1,2,30- inputfile
デフォルトはタブです。 -d
スイッチで変更できます。
すべての列をループして、不要な列を除外できます。
awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt
NF
は、レコード内のフィールドの総数を示します。
条件を満たす列ごとに、列に続いてスペースを印刷します" "
。
編集:johnnyの発言後に更新:
awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt
これは2つの方法で改善されています。
awk '{for(z=3;z<=15;z++)$z="";$0=$0;$1=$1}1'
入力
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21
出力
c1 c2 c16 c17 c18 c19 c20 c21
先頭または末尾の空白を追加しないPerl「スプライス」ソリューション:
Perl -lane 'splice @F,3,27; print join " ",@F' file
出力を生成します。
c1 c2 c30 c31