これは私のsample.txt以下のファイルです
31113 70:54:D2 - a-31003
31114 70:54:D2 - b-31304
31111 4C:72:B9 - c-31303
31112 4C:72:B9 - d-31302
他のスクリプトへの入力IDとして最初の5文字(31113など)を渡すため、シェルスクリプトを作成する必要があります。このために私はこれを試しました
#!/bin/sh
filename='sample.txt'
filelines=`cat $filename`
while read -r line
do
id= cut -c-5 $line
echo $id
#code for passing id to other script file as parameter
done < "$filename"
しかし、これは私にエラーを与えます
cut: 31113: No such file or directory
cut: 70:54:D2 No such file or directory
31114
31111
31112
: No such file or directory
これどうやってするの?
このようにcut
を使用する場合は、次のように redirection _<<<
_ (here文字列)を使用する必要があります。
_var=$(cut -c-5 <<< "$line")
_
_id= cut -c-5 $line
_の代わりにvar=$(command)
式を使用していることに注意してください。これは、コマンドを変数に保存する方法です。
また、_/bin/bash
_の代わりに__/bin/sh
_を使用して機能させます。
私に働いている完全なコード:
_#!/bin/bash
filename='sample.txt'
while read -r line
do
id=$(cut -c-5 <<< "$line")
echo $id
#code for passing id to other script file as parameter
done < "$filename"
_
さて、ワンライナーcut -c-5 sample.txt
。例:
$ cut -c-5 sample.txt
31113
31114
31111
31112
そこから、他のスクリプトまたはコマンドにパイプできます:
$ cut -c-5 sample.txt | while read line; do echo Hello $line; done
Hello 31113
Hello 31114
Hello 31111
Hello 31112
echo
をcut
にパイプするのではなく、cut
の出力をwhileループに直接パイプするだけです。
cut -c 1-5 sample.txt |
while read -r id; do
echo $id
#code for passing id to other script file as parameter
done
これが必要な場合、awkは空白を自動的に認識できます。
awk '{print $1}' sample.txt
次の簡単な例を確認してください。
while read line; do id=$(echo $line | head -c5); echo $id; done < file
どこ head -c5
は、文字列から最初の5文字を取得する正しいコマンドです。
ファイルから最初の列を取得しようとする場合は、awk
を試してください。
#!/bin/sh
filename='sample.txt'
while read -r line
do
id=$(echo $line | awk '{print $1}')
echo $id
#code for passing id to other script file as parameter
done < "$filename"
一番上の答えよりもやや単純です:
#!/bin/bash
filename='sample.txt'
while read -r line; do
id=${line:0:5}
echo $id
#code for passing id to other script file as parameter
done < "$filename"