以下のように非常に長いテーブルをたくさん再フォーマットする必要があります。
オリジナルフォーマット:
John Smith,Jones,Taylor
Janet Williams,Brown,Wilson
必須形式:
John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson
どうすればいいですか?
答え1
そしてawk
:
awk -F"[ ,]" '{for(i=2;i<=NF;i++){print $1,$i;}}' file
-F"[ ,]"
: 区切り文字はスペースとカンマで設定されます。$1
名前に姓を追加し、$2
最後のフィールドに姓を追加しました。for(i=2;i<=NF;i++)
:フィールド2から始めて各フィールドを繰り返します。print $1,$i;
:氏名を記載してから姓を記入してください。
出力:
John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson
答え2
努力する
awk ' { n=split($2,A,",") ;
for (i=1;i<=n;i++) printf "%s %s\n",$1,A[i] ;
} ' file
どこ
split($2,A,",")
2番目のフィールドはカンマ(、)で区切られています。n=
計算できるfor( )
繰り返すA[i]
現在の名前(または姓)です。printf "%s %s\n",$1,A[i]
一緒に印刷してください。
答え3
そしてsed:
sed ':1;s/,/\n/;T;P;s/\S*\n//;t1' file
:1
戻りポイントの表示s/,/\n/
s
n
最初のカンマを ewline に置き換えます。T
置き換えが行われていない場合(行にカンマがなくなった場合)、スクリプトの最後に渡されます。P
n
最初から最後まで行を印刷s/\S*\n//
\S*
ewlineを使用して単語(空でない記号)を削除します。n
t1
交換が成功した場合 - 戻り1
ポイント
以上POSIX'リー
sed ':1;s/,/\n/;/\n/P;s/\S*\n//;t1' file