私のファイルは次のとおりです
User Charts
User ID:
40944827
User Name:
Joe, Neo
Gender:
M
DOB:
3/20/2000 12:00:00 AM - Age: 20 yr. 10 mo. old
次の形式で結果を使用またはawk
取得したいと思います。sed
LastName, First Name,Gender,DOB
Joe,Neo,M,3/20/2000
ベストアンサー1
実際の入力ファイルに2つ以上のレコードが含まれているとします。たとえば、次のようになります。
$ cat file
User Charts
User ID:
40944827
User Name:
Joe, Neo
Gender:
M
DOB:
3/20/2000 12:00:00 AM - Age: 20 yr. 10 mo. old
User ID:
1234
User Name:
Bob, Slob
Gender:
X
DOB:
5/28/2000 12:00:00 AM - Age: 20 yr. 10 mo. old
コードを入力行の値にリンクせずにCSVに変換する方法は次のとおりです。
$ cat tst.awk
BEGIN { OFS="," }
NR==1 { next }
!(NR%2) { sub(/:.*/,""); hdrs[++numFlds]=$0 }
NR%2 { vals[numFlds]=$0 }
!((NR-1)%8) {
if ( !doneHdr++ ) {
for (fldNr=1; fldNr<=numFlds; fldNr++) {
printf "\"%s\"%s", hdrs[fldNr], (fldNr<numFlds ? OFS : ORS)
}
}
for (fldNr=1; fldNr<=numFlds; fldNr++) {
printf "\"%s\"%s", vals[fldNr], (fldNr<numFlds ? OFS : ORS)
}
numFlds = 0
}
$ awk -f tst.awk file
"User ID","User Name","Gender","DOB"
"40944827","Joe, Neo","M","3/20/2000 12:00:00 AM - Age: 20 yr. 10 mo. old"
"1234","Bob, Slob","X","5/28/2000 12:00:00 AM - Age: 20 yr. 10 mo. old"
for
これは正確に探している出力ではありませんが、実際にはより便利です。データ値に基づいて決定を下し、選択したフィールドの出力を変更するループの調整にすぎないことがわかります。あなたが望むように。