空白をタブに変更する私のawkプログラムは動作しません。

空白をタブに変更する私のawkプログラムは動作しません。

awkデータファイルを読み込み、students.txt次のようにタブ形式でデータを出力するシェルスクリプトを作成する方法:

Surname Forename MSc Stream Date of Birth
Smith John IT 15.01.1986
Taylor Susan IT 04.05.1987
Thomas Steve MIT 19.04.1986
  • タブ列が間違って配置されても心配しないでください。

  • 各列(姓、名、修士、生年月日)は1つのタブに分かれています。

質問:

以下のコードがなぜ機能しないのですか?

awk 'BEGIN {IFS=" "} {OFS="\t"} {print $1,$2,$3,$4}' students.txt

ベストアンサー1

awk '{$1=$1}1' OFS="\t" students.txt

概念の証拠

$ awk '{$1=$1}1' OFS="\t" students.txt
Surname Forename        MSc     Stream  Date    of      Birth
Smith   John    IT      15.01.1986
Taylor  Susan   IT      04.05.1987
Thomas  Steve   MIT     19.04.1986

説明する

機能しない理由は、awk新しい出力フィールド区切り文字を適用する前にフィールドの1つを変更する必要があるためです。この欠陥(IMHO)の回避策は、フィールドを独自に設定することです。$1=$1


この簡単な変更の場合、trまたはsed

tr -s ' \t' '\t*' < students.txt
sed 's/[[:space:]]\+/\t/g' students.txt

おすすめ記事