2016-10-02 8 views
0

私はCST_IDを変数に取り込みたいので、このようなUnixファイルに最初のレコードがあります。新しい区切り文字の場合の最初のフィールドの取得

CST_ID||@||CST_NAME||@||CST_ADD||@||CST_ACC 

どうすればいいですか?私はこれを使用しています。

head -1 test.txt | awk -F '||@||' '{print $1}' 

しかし、それは出力としてCST_ID||を与えているが、私は唯一のCST_IDを必要としています。

+1

これはコード作成サービスではありません。これまでに何を試しましたか?あなたのコードを投稿してください!あなたがそれを走らせたとき何が起こったのですか?代わりに何が起こると思いますか?具体的に何が問題になっていますか? – Robert

+0

こんにちは、私はこれを使用しています。頭-1 test.txt | awk -F '|| @ ||' '{print $ 1}' ....しかし、それはCST_IDを与えている||出力として。しかし、私はCST_ID – user6911877

+1

@ user6911877のみ必要です:将来、質問を編集して余分な情報を追加してください。今回は、私はあなたのためにしましたが、将来は自分でやるべきです(そして、あなたはそれを追加するように促されることなく、あなたの最善の努力を含んでいなければなりません。 –

答えて

1

追加したタグと同様に、cutを使用できます。

[email protected]:~$ cat input 
CST_ID||@||CST_NAME||@||CST_ADD||@||CST_ACC 

[email protected]:~$ cut -d '|' -f 1 < input 
CST_ID 

-dは、区切り文字(ここではパイプ)を定義します。シェルが解釈しないように、一重引用符で囲む必要があります。 -fには、この場合は最初のフィールドを指定します。

これを特定の行数だけ実行したい場合は、head(またはtail)と組み合わせてください。この(仮定bashの)のような変数に

キャプチャこれを:

var=$(cut -d '|' -f 1 < input) 
+0

こんにちは、cut -d 'I'を使うと、区切り文字を| ?区切り記号は|| @ ||です。私はcut -d '|| @ ||'を使いたいです。シェルは私に構文エラーを与えています。 – user6911877

+0

なぜあなたは '|| @ ||'を使いたいのですか?デリミタとして?あなたがCST_ID部分だけを気にしているなら、 '|'結構です。 – Robert

0

サンプル入力:

cat sample 
    CST_ID||@||CST_NAME||@||CST_ADD||@||CST_ACC 

対処:最初||まで行の先頭からgrepが見られます。 -mは、最初にマッチした後に終了するために使用されます。
awk||が区切り文字として設定され、最初のフィールドが印刷されます。 NR==1は、検索を最初のフィールドに限定することです。

grep -m1 -oP '^.*?(?=\|\|)' sample 
CST_ID 
awk -F'\\|\\|' 'NR==1{print $1}' sample 
CST_ID 
awk -F'\\|\\|' 'NR==1{NF=1}1' sample 
CST_ID 
関連する問題