各行に多くの行があるファイルがあり、空白で区切られた多くの列(フィールド)があります ""各行の列数が異なります最初の2つの列を削除するにはどうすればよいですか?
質問する
132095 次
9 に答える
157
あなたはそれを行うことができますcut
:
cut -d " " -f 3- input_filename > output_filename
説明:
cut
: カット コマンドを呼び出します-d " "
: 区切り文字として単一のスペースを使用します (cut
デフォルトでは TAB を使用します)-f
: 保持するフィールドを指定します3-
: フィールド 3 で始まるすべてのフィールドinput_filename
: このファイルを入力として使用します> output_filename
: 出力をこのファイルに書き込みます。
または、次の方法で実行できますawk
。
awk '{$1=""; $2=""; sub(" ", " "); print}' input_filename > output_filename
説明:
awk
: awk コマンドを呼び出す$1=""; $2="";
: フィールド 1 と 2 を空の文字列に設定しますsub(...);
: フィールド 1 と 2 は引き続き " " で区切られるため、出力フィールドをクリーンアップします。print
: 変更された行を出力しますinput_filename > output_filename
: 同上。
于 2012-11-19T00:48:21.497 に答える
29
比較的理解しやすい Awk を使用した方法の 1 つを次に示します。
awk '{print substr($0, index($0, $3))}'
これはパターンのない単純な awk コマンドであるため、内部のアクション{}
は入力行ごとに実行されます。
アクションは、3 番目のフィールドの位置から始まる部分文字列を単純に出力することです。
$0
: 入力行全体$3
: 第 3 フィールドindex(in, find)
find
:文字列内の位置を返しますin
substr(string, start)
: index から始まる部分文字列を返しますstart
コンマなどの別の区切り文字を使用する場合は、 -F オプションで指定できます。
awk -F"," '{print substr($0, index($0, $3))}'
でアクションの前にパターンを指定することにより、入力行のサブセットでこれを操作することもできます{}
。パターンに一致する行だけがアクションを実行します。
awk 'pattern{print substr($0, index($0, $3))}'
pattern は次のようなものです。
/abcdef/
: 正規表現を使用し、デフォルトで $0 で動作します。$1 ~ /abcdef/
: 特定のフィールドを操作します。$1 == blabla
: 文字列比較を使用NR > 1
: レコード/行番号を使用NF > 0
: フィールド/列番号を使用
于 2013-02-05T19:18:29.030 に答える
12
質問を投稿していただきありがとうございます。また、私を助けたスクリプトを追加したいと思います。
awk '{ $1=""; print $0 }' file
于 2014-07-07T01:13:19.633 に答える
6
シェルだけでそれを行うのはかなり簡単です
while read A B C; do
echo "$C"
done < oldfile >newfile
于 2014-07-07T02:09:52.167 に答える
4
パール:
perl -lane 'print join(' ',@F[2..$#F])' File
awk:
awk '{$1=$2=""}1' File
于 2014-12-10T09:17:46.497 に答える
1
これはあなたのために働くかもしれません(GNU sed):
sed -r 's/^([^ ]+ ){2}//' file
または、1つ以上の空白で区切られた列の場合:
sed -r 's/^(\S+\s+){2}//' file
于 2012-11-19T07:14:05.560 に答える