วิธี 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 นั้นมีการจัดทำดัชนี 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