grep、sed、awk、または他のLinuxツールまたはbashスクリプトを使用して、ファイルの各行から「\ t $ month \ t $ day \ n」シーケンスを検索する方法...
\t = tab
\n = new line
$month = Sep #$month is a variable with the content “Sep”
$day = 4 #$day is a variable with the content “4”?
grepを使用すると、それぞれ\ t、\ n、$ month、および$ dayを見つけることができますが、誤った肯定を減らすために、ツールがすべての行で「\ t $ month \ t」$ day \ n」の組み合わせを検索するようにしたいと思います。一致すると、その行を標準出力、つまりコンソールに送信します。
「\t$month\t$day\n」の組み合わせに対してファイル内の各行を検索し、ツールが一致する各行をコンソールに出力するようにするにはどうすればよいですか。
例:以下は「start-with-core」ファイルの内容です。
$ cat start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
最初のフィールド(列)の後にはタブ文字、2番目のフィールドの後にはタブ文字、3番目のフィールドの後には改行文字があります。
$ echo $month
Sep
$ echo $day
4
$ grep $'\n' start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
$ grep $'\t' start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
$ grep "$month" start-with-core
core4321 Sep 3
core4 Sep 4
core10 Sep 4
core44 Sep 2
core400 Sep 3
$ grep "$day" start-with-core
core4321 Sep 3
core.1234 Nov 4
core4 Sep 4
core10 Sep 4
core11 Nov 4
core44 Sep 2
core400 Sep 3
どんなアイデアがありますか?ありがとうございます!学生
///\\
答え1
grep
パターンに一致する行を見つけたら、一致する行を探したいようです。終わり存在する\t$month\t$day
。
だから:
TAB=$(printf '\t') # or TAB=$'\t' with many shells
grep "$TAB$month$TAB$day\$" < your-file
ここでは$
(ほとんどのシェルではエスケープなしで従うのが安全ですが、シェルが引数拡張にこれを使用するため、ここでエスケープされます"
)はトピックの終わりと一致します。
awk
表形式のデータ処理に適しています。これを使用して、行を最後のフィールドと$day
最後から2番目のフィールドと一致させることができます$month
。
M=$month D=$day awk -F '\t' '
$NF == ENVIRON["M"] && $(NF-1) == ENVIRON["D"]
' < your-file
awk
==
両方のオペランドが数値のように見え、ここのように明示的に文字列として入力されていない場合は、数値比較が実行されるため一致しますSep
4
が、 Sep
04
// 4.0
...4e0