特定の列の内容をawkに置き換える方法は?


31

指定:レコードには40列あります。35番目の列が35番目の列の内容と「$」記号で置き換えられるように、35番目の列を置き換えます。思いついたのは次のようなものです:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

動作しますが、列の数が10kほど大きい場合は実行できないためです。これを行うためのより良い方法が必要です。

回答:




3

フィールド区切り文字が<space>次の場合:

sed 's/  */$&/35'

フィールドの区切り文字が不明な場合:sed 's/./$&/35'
15

@Underverse-同じことだとは思いません。これは、入力行の35番目の文字の前にcharを付ける必要があります$-区切られているかどうか。上記のこと$は、各フィールドにcharがどのように存在するかに関係なく、任意の数の区切り文字の35番目の出現、つまり35番目のフィールドにcharを付加する必要があります。
mikeserv

ああ、「レコード内の40列」。「35番目の列」を文字通り「テキストファイルの35番目の文字列」と読みます。
アンダーバース

3

元のフィールドセパレーターを予約するために、これを行いました。空白にする列は12ドルでした。

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

gawk -iあれば、ファイルをその場で編集できます。


1

「承認済み」回答の使用に問題があった場合、ファイルの最初の列だけでなく、それが置き換えられます。この汎用コマンドを使用します。

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

どこで:

  • [column] =変更する列は1から始まります(0ではありません)
  • [replace] =置換するテキスト

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ...数秒で100万個のタイムスタンプを置き換えました!! :)
roblogic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.