たとえば、私はファイルを持っています:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
そして私は必要です:
example, line, file
i intent with "awk" but the problem is that the words are in different space
試す
$ awk 'NF>1{print $NF}' file
example.
line.
file.
例のように 1 行で結果を取得するには、次を試してください。
{
sub(/\./, ",", $NF)
str = str$NF
}
END { print str }
出力:
$ awk -f script.awk file
example, line, file,
純粋なバッシュ:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.
grep で簡単に実行できます。
grep -oE '[^ ]+$' file
(-E
拡張正規表現を使用します。-o
行全体ではなく、一致したテキストのみを出力します)
awk で次のようなことができます。
awk '{ print $NF }'
編集:空行を避けるには:
awk 'NF{ print $NF }'
単純な bash でこれを行う別の方法は、rev
次のようなコマンドを使用することです。
cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
基本的に、ファイルの行を反転し、区切り文字としてスペースを使用してそれらを分割し、生成cut
される最初のフィールドを取得してcut
から、トークンを再度反転し、tr -d
不要な文字を削除tr
し、改行文字を再度置き換えます,
また、次のようにして、最初の猫を回避できます。
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
このようなファイルの場合
$ cat file.txt
The quick brown fox
jumps over
the lazy dog.
指定されたコマンドが出力されます
fox, over, dog.
使い方:
awk '{print $NF}'
: すべての行の最後のフィールドを出力しますpaste -sd,
stdin
:連続して読み取り( -s
、一度に 1 ファイル)、フィールドをコンマ区切りで書き込みます ( -d,
)sed 's/,/, /g'
: s
lobally","
に", "
g
置き換えます (すべてのインスタンスに対して)参考文献:
多くの方法があります。ソリューションが示すようawk
に、それはクリーンなソリューションです
sed ソリューションは、最後のスペースまで何かを削除することです。したがって、最後にスペースがない場合は機能するはずです
sed 's/.* //g' <file>
回避してループsed
に行くこともできます。while
while read line
do [ -z "$line" ] && continue ;
echo $line|rev|cut -f1 -d' '|rev
done < file
それは行を読み、それを尊重し、最初の行(つまり、元の最後の行)を切り取り、元に戻します
純粋なbashの方法でも同じことができます
while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file
それはパラメータ拡張と呼ばれます