一部のファイルの一部を抽出して別のファイルにリンクしたいのですが、中間ファイルを作成したくありません。
たとえば、
$ cat textExample.txt
Much I marvelled this ungainly fowl to hear discourse so plainly,
Though its answer little meaning- little relevancy bore;
For we cannot help agreeing that no living human being
Ever yet was blessed with seeing bird above his chamber door-
Bird or beast upon the sculptured bust above his chamber door,
With such name as "Nevermore."
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}'
marvelled
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 77, 6)}'
answer
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 189, 7)}'
blessed
文を結合するには、ファイルを作成します。
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}'| tr "\n" " " > intermediate.txt
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 77, 6)}' | tr "\n" " " >> intermediate.txt
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 189, 7)}' >> intermediate.txt
$ cat intermediate.txt
marvelled answer blessed
または、複数のawkコマンドを使用できます(ただし、改行文字を削除することはできません)。
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}; {print substr($0, 77, 6)}; {print substr($0, 189, 7)}'
marvelled
answer
blessed
cat
次のようなものを使用して、中間ファイルに依存せずに他の単語を一緒にリンクできるかどうか疑問に思います。
$ cat {first word} | cat {second word} | cat {third word}
first second third
ありがとう
答え1
私があなたを正しく理解したならば、これは私にとって効果的でした。
cat textExample.txt | tr -d "\n" | awk '{print substr($0, 8, 9) " " substr($0, 77, 6) " " substr($0, 189, 7)}'
答え2
私はあなたの意図を理解していません。
しかし、試してみてください:
... | tr -d '\n' |
awk '{printf "%s %s %s\n", substr($0, 8, 9),substr($0, 77, 6),substr($0, 189, 7)}'
あなたのフィードバックを提供
tr -d '\n' < se | awk '{printf "%s %s %s\n", substr($0, 8, 9),substr($0, 77, 6),substr($0, 189, 7)}'
marvelled answer blessed
- 見てください。デフォルトでは改行文字で
printf
終わりません。print
また、サブシェルを使用できます
( cmd1 arg 1
cmd2 arg for 2
cmd 3 ) > result
するとcmd
sの出力がresult
。
答え3
バッシュと
cat extract_words.sh
#!/bin/bash
concat=" "
min=$(($6+$7))
while read line
do
concat="$concat$line"
if test "${#concat}" -ge "$min" ; then
break
fi
done < "$1"
echo "${concat:$2:$3}" "${concat:$4:$5}" "${concat:$6:$7}"
君はただそう呼んでる
./extract_words.sh "textExample.txt" 8 9 77 6 189 7