以下は、特定の行と特定の場所からデータをコピーする必要があるファイルです。
CP I ({010010010010010010010010010010}000 000) 234764-CTS_fsdfs_a_inv_33ghf/ZN
--- I ({111100011111100000000000011100}111 111) 2518255-
Q O ({001111100011111100000000000011}111 **1**11) 2520618-
AP I ({010010010010010010010010010010}010 010) 23499764-fdsf_ccl_a_inv_3330gg/XX
--- I ({111111111111111111111100000011}000 000) 2518255-
Q O ({011111110011111111111111100000}000 **0**00) 2909918-
QP I ({110010010010010010010010010010}010 010) 234764-ZZZ_ccl_a_inv_33305/ZZ
--- I ({111111111111111111111100000011}000 000) 2518255-
Q O ({011111111111111111111111100000}000 **1**11) 2599918-
注:**は元のファイルにはなく、新しいファイルに印刷する番号を識別するのに役立ちます。
Q行の太字だけを印刷する必要があります。内容を1行ずつ新しいファイルに保存します。 $3 で awk コマンドを使用すると、次のエラーが発生するため、$3 タイプのコマンドを持たないコードを提案してください。
can't read "3": no such variable
助けてくれてありがとう
答え1
次のように試すことができます。
awk '$1=="Q"{split($4,a,""); print a[1]}' input_file >new_file
アイデアは、split
独自の要素の各文字にヌル区切り文字を使用することです。
また、提案どおりに使用できます
awk '$1=="Q"{print substr($4,1,1)}' input_file >new_file
答え2
行のどれも初期空白がないと仮定し(質問の行は最初にさまざまな量の空白があるようですが、誤ってコピーして貼り付けたためと仮定します)、形式は次のように修正されました。フィールド幅などを考慮して:
$ cut -c 1,2,51 file | sed -n 's/^Q //p'
1
0
1
これにより、各行から最初の2文字と51文字が抽出されます。最初の2文字は、sed
出力する行を決定するために使用されます(最初の2文字を削除した後)。文字51が探している数字。
または(おそらくより簡単かもしれません)と以下grep
を使用してくださいcut
。
$ grep '^Q ' file | cut -c 51
1
0
1
ここでは、を使用して興味深い行を抽出し、を使用してgrep
各行の51番目の文字を抽出しますcut
。繰り返しますが、これはファイルタイプに固定幅フィールドがあり、初期スペースがない場合にのみ機能します。