awkアプローチ:
$ awk 'NR==1{print substr($0,12,8)};NR==3{print substr($0,4,4)}' input.txt
Ethernet
t6 a
NR
行(awk用語-レコード)番号を決定するために使用し、それに応じて行のサブストリングを印刷します。substr()
関数は形式です
substr(string,starting position,how much offset)
パイソン
$ python -c 'import sys
> for index,line in enumerate(sys.stdin,1):
> if index == 1:
> print line[11:19]
> if index == 3:
> print line[3:7]' < input.txt
Ethernet
t6 a
これは、<
シェルオペレーターを使用して、入力ストリームを入力ファイルからPythonプロセスにリダイレクトします。Pythonの文字列には0インデックスが付いているため、目的の文字数をすべて1だけシフトする必要があることに注意してください。
ポータブルシェルウェイ
これはで動作しksh
、dash
、bash
。シェルユーティリティのみに依存し、外部には依存しません。
#!/bin/sh
rsubstr(){
i=0;
while [ $i -lt $2 ];
do
rmcount="${rmcount}?"
i=$(($i+1))
done;
echo "${1#$rmcount}"
}
lsubstr(){
printf "%.${2}s\n" "$1"
}
line_handler(){
case $2 in
1) lsubstr "$(rsubstr "$1" 11)" 8 ;;
3) lsubstr "$(rsubstr "$1" 3)" 5 ;;
esac
}
readlines(){
line_count=1
while IFS= read -r line;
do
line_handler "$line" "$line_count"
line_count=$(($line_count+1))
done < $1
}
readlines "$1"
そしてそれはそのように機能します:
$ ./get_line_substrings.sh input.txt
Ethernet
t6 ad