我尝试在dpkg中对我的文件使用awk命令,并得到这个错误:
awk '{print $1,$6}' cmd.txt > cmd2.txt文件内容:
Port Protocol Type Board Name FQBN Core
/dev/ttyACM0 serial Serial Port (USB) Unknown
/dev/ttyACM1 serial Serial Port (USB) Arduino Mega or Mega 2560 arduino:avr:mega arduino:avr
/dev/ttyAMA0 serial Serial Port Unknown
/dev/ttyAMA1 serial Serial Port Unknown
/dev/ttyAMA2 serial Serial Port Unknown
/dev/ttyAMA3 serial Serial Port Unknown
/dev/ttyS0 serial Serial Port Unknown
/dev/ttyUSB0 serial Serial Port (USB) Unknown
/dev/ttyUSB1 serial Serial Port (USB) Unknown
/dev/ttyUSB2 serial Serial Port (USB) Unknown
/dev/ttyUSB3 serial Serial Port (USB) Unknown在dpkg中,似乎有不同的行为。有人能给我个建议吗。
编辑:我的理想案例
arduino-cli board list | awk -F ' ' '{print $1,$6}' |while read var1 var2
do
if [ "$var2" == "Arduino" ];then
device_path=$var1
dosomething...
break;
fi
done发布于 2022-07-06 08:56:45
Awk使用记录分隔符(即空格、昏迷、分号.)。您的输入文件不带分隔符,以列格式表示。不幸的是,一些数据列(3和4)包含空格。
你可以用这个
cut -c 1-13,84- cmd.txt > cmd2.txt或者这个:
awk '{print substr($0,1,12) " " substr($0,84)}' cmd.txt > cmd2.txt这些解决方案的最大问题是,每一列的长度!
但是,可以确定长度:
Awk脚本文件columns.awk:
#! /usr/bin/awk -f
BEGIN {
COLS[++NB_COLS] = "Port"
COLS[++NB_COLS] = "Protocol"
COLS[++NB_COLS] = "Type"
COLS[++NB_COLS] = "Board Name"
COLS[++NB_COLS] = "FQBN"
COLS[++NB_COLS] = "Core"
}
NR == 1 {
for (COL in COLS) {
START_COL[COL] = index($0, COLS[COL])
if (COL > 1) {
LEN_COL[COL - 1] = START_COL[COL] - START_COL[COL - 1] - 1
}
}
LEN_COL[NB_COLS]=length($0)
}
{
print substr($0, START_COL[1], LEN_COL[1]) " " substr($0, START_COL[6], LEN_COL[6])
}通过以下方式:
chmod 755 columns.awk用于:
./columns.awk cmd.txt > cmd2.txtcmd2.txt文件内容:
Port Core
/dev/ttyACM0
/dev/ttyACM1 arduino:avr
/dev/ttyAMA0
/dev/ttyAMA1
/dev/ttyAMA2
/dev/ttyAMA3
/dev/ttyS0
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2
/dev/ttyUSB3 https://askubuntu.com/questions/1417312
复制相似问题