1

最後の文字 K に基づいてフィールドの一部を抽出したい。すべてのフィールドは K で終わり、抽出したいフィールドには 4 文字しかありません。

私はこのようなものを持っています

fromdata.set.days/john001.00.K 

fromdata.set.days/bian001.00.K

fromdata.set.days/aluo001.00.K

fromdata.set.days/mark001.00.K

上記から次の4文字の名前を抽出したい

john

bian

aluo

mark
4

2 に答える 2

1

片道awk:

awk -F/ '{for (i=1;i<=NF;i++) if(substr($i,length($i))=="K") print substr($i,1,4) }' file

ファイルを区切り、/各列の最後の文字を探します。で終わる場合Kは、その列の最初の 4 文字を出力します。

テスト:

$ cat file
fromdata.set.days/john001.00.K
fromdata.set.days/bian001.00.K
fromdata.set.days/aluo001.00.K
fromdata.set.days/mark001.00.K

$ awk -F/ '{for (i=1;i<=NF;i++) if(substr($i,length($i))=="K") print substr($i,1,4) }' file
john
bian
aluo
mark
于 2013-06-11T04:44:40.680 に答える
0

上記のコメントで、このリストを変数に割り当て、ループ内の名前を反復処理することを述べているため、awkまたは別の外部ツールを使用する必要はありません-パラメーター展開を使用するだけです:

$ cat foo.txt
fromdata.set.days/john001.00.K
fromdata.set.days/bian001.00.K
fromdata.set.days/aluo001.00.K
fromdata.set.days/mark001.00.K

$ cat test.sh
#!/bin/bash

while read line; do
        name=${line#*/}
        name=${name:0:4}
        echo "${name}"
done < foo.txt

実行例:

$ ./test.sh
john
bian
aluo
mark
于 2013-06-12T15:04:15.817 に答える