特定の行の特定の場所にある単語を新しいファイルとして印刷するスクリプト

特定の行の特定の場所にある単語を新しいファイルとして印刷するスクリプト

以下は、特定の行と特定の場所からデータをコピーする必要があるファイルです。

 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。繰り返しますが、これはファイルタイプに固定幅フィールドがあり、初期スペースがない場合にのみ機能します。

関連情報