1

このような形のデータがあります

JSD4863 XXX-XX-XXXX DOE、JOHN C JR-II BISS CPSC BS INFO TECH 412 / 779-9445 

リストが大きいので、特定の行を読み取るためにループを作成しました。こんな感じ

#!/bin/bash
for linePosition in {11..22}
do
  holder=`sed -n "${linePosition}p" $1|awk '{print $12}'`
  echo "$holder"
done

番号を出力し412/779-9445ます。すべての行で機能しますが、最後の4つの数字にのみ関心があります(例9445)。ループに何を追加して、これに区切ることができますか?私は試しcutました、多分私の構文はちょうど間違っていました。

4

3 に答える 3

0

Awk のみ:

awk 'FNR>=11 && FNR<=22 {print $12}' file

セッド+ awk:

sed -n '11,22p' | awk '{print $12}'
于 2013-02-17T20:16:55.750 に答える
0

以下を見てください。最初のコマンドで、スクリプトがどのように機能するかを示しています。2 番目のコマンドでは、サンプル スクリプトからの出力を示しています。

$ cat a.sh
#!/bin/sh
sed -n '11,22p' $1 | grep -o '[0-9]*$'

$ ./a.sh a.txt
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445
于 2013-02-17T19:44:08.663 に答える
0

sed -rn 's/.*-([0-9]{4})$/\1/p'

于 2013-02-17T19:50:54.773 に答える