加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用bash将行中的字符串分配给变量

发布时间:2020-12-15 22:26:48 所属栏目:安全 来源:网络整理
导读:我有以下文本文件,我需要比较每行的值,即项目2-4与项目5-7.我坚持使用bash / awk / sed. 样本数据: [hartford tmp]$cat flista1 1 2 3 x y zb1 3 2 1 z y xc1 1 2 3 1 2 3d1 4 5 6 6 5 4e1 a b c a b cf1 x y z x y z 它适用于以下脚本,但它只是无法忍受的
我有以下文本文件,我需要比较每行的值,即项目2-4与项目5-7.我坚持使用bash / awk / sed.

样本数据:

[hartford tmp]$cat flist
a1 1 2 3 x y z
b1 3 2 1 z y x
c1 1 2 3 1 2 3
d1 4 5 6 6 5 4
e1 a b c a b c
f1 x y z x y z

它适用于以下脚本,但它只是无法忍受的缓慢,可能是因为所有的回声.

[hartford tmp]$cat pdelta.sh
#!/bin/bash

cat flist |while read rec; do
    f1="$(echo $rec | awk '{ print $1 }')"
    f2="$(echo $rec | awk '{ print $2 }')"
    f3="$(echo $rec | awk '{ print $3 }')"
    f4="$(echo $rec | awk '{ print $4 }')"
    f5="$(echo $rec | awk '{ print $5 }')"
    f6="$(echo $rec | awk '{ print $6 }')"
    f7="$(echo $rec | awk '{ print $7 }')"

    if [[ "x${f2} x${f3} x${f4}" != "x${f5} x${f6} x${f7}" ]]; then
            echo "$f1 DOES NOT MATCH"
    fi
done

运行时,输出正是我正在寻找的,但在处理长度为50k的文件时速度太慢.

[hartford]$./pdelta.sh
a1 DOES NOT MATCH
b1 DOES NOT MATCH
d1 DOES NOT MATCH

有什么更有效的方法来实现这一目标?

解决方法

您可以使用awk输出所有匹配的ID:

awk '{ if ($2 == $5 && $3 == $6 && $4 == $7) { print $1 } }' < flist

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读