1

私はUNIX全般にかなり慣れていないので、自分がやろうとしていることをどのように達成するかを理解するのに苦労しています。このようなレコードの場合:

 Name:Alice,ID:2368, Hometown:columbus,bithday:03/11/1988
Name:Bob,ID:2568,Hometown:New York,bithday:04-24-1985
Name:Ted,ID:2368, Hometown:Portland,bithday:06-11-1992
Name:Mark,        ID:2218, Hometown:Palo Alto,bithday:04-23-1984
Name:Xiao,      ID:2571, hometown:Carson,bithday:07/06/1975
Name:Rain,  ID:0264, hometown:little stone,bithday:11-09-1982
Name:Susuan, ID:1261, Hometown:Menlo park,bithday:12-13-1989
Name:Zack,  ID:1594, Hometown:columbus,bithday:02-04-1984

コロンで終わり、同時にコンマがない列を削除したい。

したがって、特定の行は次のようになります。

Mark 2218 Palo Alto 04-23-1984

私はawkの使用例をいくつか見てきましたが、これはこれまでの私の考えです。

awk 'BEGIN {FS=":"} ; {for (i=1; i<=NF; i++) 

私の思考プロセスは、基本的に各行をループして、「フィールドがコロンで終わる場合は、それを削除して、コロンで終わる次のフィールドを探し、次の行に移動するなどです。方法がわかりません。これを行うために、これまでに見たすべてのチュートリアルがこれに似たものを何もしていないので、私は苦労しています。誰かが私を助けてくれるなら、私は心から感謝します!私はどんな助けにも感謝します。

4

2 に答える 2

3
$ cat file
Name:Mark,        ID:2218, Hometown:Palo Alto,bithday:04-23-1984

$ awk '{sub(/^[^:]*:/,""); gsub(/,[^:]+:/," ")}1' file
Mark 2218 Palo Alto 04-23-1984

$ sed -e 's/^[^:]*://' -e 's/,[^:][^:]*:/ /g' file
Mark 2218 Palo Alto 04-23-1984
于 2013-03-23T03:42:06.357 に答える
1

awkフィールド区切り文字は(とにかくGNU awkでは)正規表現にすることができるため、FSをコンマまたはコロンに設定してから、他のすべてのフィールドを出力します。

awk -v FS='[,:]' '{for(i=2; i<=NF; i+=2) {printf "%s ", $i}; print ""}'

サンプル入力が与えられると、次のようになります。

Alice 2368 columbus 03/11/1988 
Bob 2568 New York 04-24-1985 
Ted 2368 Portland 06-11-1992 
Mark 2218 Palo Alto 04-23-1984 
Xiao 2571 Carson 07/06/1975 
Rain 0264 little stone 11-09-1982 
Susuan 1261 Menlo park 12-13-1989 
Zack 1594 columbus 02-04-1984 
于 2013-03-23T04:11:42.607 に答える