首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk:第1行:

awk:第1行:
EN

Ask Ubuntu用户
提问于 2022-07-05 11:12:43
回答 1查看 1.2K关注 0票数 0

我尝试在dpkg中对我的文件使用awk命令,并得到这个错误:

代码语言:javascript
复制
awk  '{print $1,$6}' cmd.txt > cmd2.txt

文件内容:

代码语言:javascript
复制
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中,似乎有不同的行为。有人能给我个建议吗。

编辑:我的理想案例

代码语言:javascript
复制
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
EN

回答 1

Ask Ubuntu用户

发布于 2022-07-06 08:56:45

Awk使用记录分隔符(即空格、昏迷、分号.)。您的输入文件不带分隔符,以列格式表示。不幸的是,一些数据列(3和4)包含空格。

你可以用这个

代码语言:javascript
复制
cut -c 1-13,84- cmd.txt > cmd2.txt

或者这个:

代码语言:javascript
复制
awk  '{print substr($0,1,12) " " substr($0,84)}' cmd.txt > cmd2.txt

这些解决方案的最大问题是,每一列的长度!

但是,可以确定长度:

Awk脚本文件columns.awk

代码语言:javascript
复制
#! /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])
}

通过以下方式:

代码语言:javascript
复制
chmod 755 columns.awk

用于:

代码语言:javascript
复制
./columns.awk cmd.txt > cmd2.txt

cmd2.txt文件内容:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1417312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档