AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 685810
Accepted
jian
jian
Asked: 2022-01-11 09:48:24 +0800 CST2022-01-11 09:48:24 +0800 CST 2022-01-11 09:48:24 +0800 CST

按列排序未按预期工作

  • 772

cat marks.txt返回

1)  Amit    Physics  80
2)  Rahul   Maths    90
3)  Shyam   Biology  87
4)  Kedar   English  85
5)  Hari    History  89

awk -F" " '{ print $4"\t" $0 }' marks.txt | sort | cut -f 2-根据第四列成功对文本进行排序。

上下文:https
://stackoverflow.com/questions/17048188/how-to-use-awk-sort-by-column-3 但要模拟投票最高的答案: sort -t" " -nk4 marks.txt 但只返回:

1)  Amit    Physics  80
2)  Rahul   Maths    90
3)  Shyam   Biology  87
4)  Kedar   English  85
5)  Hari    History  89

为什么排序子句不起作用?

awk sort
  • 2 2 个回答
  • 151 Views

2 个回答

  • Voted
  1. αғsнιη
    2022-01-11T09:55:08+08:002022-01-11T09:55:08+08:00

    using sort -t' '(space character as the field seperator here) 会将每个空格视为字段分隔符,而不是将所有连续的空格视为单个分隔符,这就是为什么它没有给你你所期望的,这就是为什么给出第一个 commmad 解决方案来分隔最后一个带有专用制表符分隔符的字段,然后根据该字段进行排序,然后从输出中删除它。

    请注意,-F" "在 awk commnad 中使用 here 对命令输出或处理没有副作用,也可以将其删除;另外知道在 awk 中, using-F" "会将任何连续的空格视为单个分隔符,而在 sort 中-t" "会将每个空格视为单独的分隔符(awk 中的等价物是-F"[ ]",即将字段分隔符定义为正则表达式)。

    最后,您最好执行以下操作:

    awk '{ print $NF"\t"$0 }' marks.txt |sort |cut -f2-
    
    • 3
  2. Best Answer
    they
    2022-01-11T10:56:40+08:002022-01-11T10:56:40+08:00

    -F在中使用空格和在中awk使用-t空格的区别sort如下:

    • awk -F ' '和刚才一样awk。单个空格是FS(内部字段分隔符)的默认值,将导致awk从数据中修剪侧翼空格(制表符和/或空格),并将由连续空格分隔的子字符串视为字段。

    • sort -t ' '会将每个空格视为分隔符。使用sortwithout-t将使实用程序以awk与连续空白(制表符和/或空格)相同的方式将每一行划分为字段。

    你的第一个命令,

    awk -F" " '{ print $4"\t" $0 }' marks.txt | sort -n | cut -f 2-
    

    (施瓦茨变换)因此与

    awk '{ print $4 "\t" $0 }' marks.txt | sort -n | cut -f 2-
    

    或者,OFS用于将输出字段分隔符设置为选项卡,

    awk -v OFS='\t' '{ print $4, $0 }' marks.txt | sort -n | cut -f 2-
    

    (还要注意上面的补充-n;sort我们希望按数字排序。)

    显式访问每行的最后一个字段允许其他字段具有可变编号(例如,如果它们包含空格):

    awk -v OFS='\t' '{ print $NF, $0 }' marks.txt | sort -n | cut -f 2-
    

    您的sort命令可以重写为按第 4 个空格分隔的列正确地按数字排序,如下所示:

    sort -k 4n marks.txt
    

    这显然假设每行数据将始终包含四个空格分隔的字段。

    • 1

相关问题

  • 根据第一个逗号之前的匹配删除重复行数

  • 在另一个文件之后逐行追加行

  • 如何删除两行之间的单行

  • 重新排列字母并比较两个单词

  • 多行文件洗牌

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve