这是我原来的命令行:
awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' file1 file2
Run Code Online (Sandbox Code Playgroud)
它位于 bash 脚本中,我最初将每个部分输出到一个文件,然后在下一行我使用该文件作为输入。但是,现在我正在切换到使用变量,并且我已经深入到这一行并且由于双重输入而卡住了。
所以我不再试图将文件提供给 awk,我想要提供变量。
如果我正在处理一个变量,我知道我会这样做:
echo "$var1" | awk '{$1=$2=""; print $0}'
Run Code Online (Sandbox Code Playgroud)
但是我找不到如何在 bash 脚本中将第二个变量/流传递到 awk 的示例。
我试过的例子:
awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "$var1" "$var2"
echo "${var1}" | awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "${var2}"
awk -v s1="$var1" -v s2="$var2" 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "$s1" "$s2"
Run Code Online (Sandbox Code Playgroud)
编辑:
对于某些背景,这是一个非常简化的版本,但我有一组类似这样的文件:
:~/test$ ls -lR ?/file*
-rw-rw-r-- 1 madivad madivad 11 Apr 19 23:17 1/file.0
-rw-rw-r-- 1 madivad madivad 6 Apr 19 23:04 1/file.1
-rw-rw-r-- 1 …
Run Code Online (Sandbox Code Playgroud) 我一直在使用键盘来重新映射某些键并创建宏等。
我了解键盘(通过 USB,我指的是带有 USB 键盘的台式计算机)提供了一个scancode
依赖于键盘的功能,根据由各种 hwdb 资源组成的规则映射到键描述符或键代码。然后这些键码由操作系统解释。
我发现evtest
直接从键盘给出最好的结果,因为它包含键盘扫描码、键码和键符号,所有这些都在一个整洁的小输出中。为了使其更干净,我通常grep
将输出变得更加整洁:
sudo evtest | grep -B1 "value 1"
Run Code Online (Sandbox Code Playgroud)
但是, xmodmap 和各种应用程序使用的代码是输出(如果输出) y的代码xev
。我没有很好的grep
for xev
,我只是按键盘事件进行过滤:
xev -event keyboard
Run Code Online (Sandbox Code Playgroud)
这个问题涉及
MIN_KEYCODE
设置为 以外的键盘8
?MIN_KEYCODE
是硬编码在https://cgit.freedesktop.org/xorg/driver/xf86-input-evdev/tree/src/evdev.c第 72 行 xev
为什么vs生成的键码存在差异evtest
我确信有人会认为这是因为前 8 个代码被保留,但这应该是无关紧要的,不是吗?键码,无论是否保留,是否不应该作为原始代码输出,而不是转置的值(无论是任意值还是固定值)并可能导致错误?
我真的只是想理解为什么有些程序输出和为什么有些系统需要 8 输出的输入之间的差异,以及如何在我的脑海中认可这种不一致。
我发现自己总是必须在命令行中向上箭头并向后移动,以更改先前命令的一部分,该部分会被转移到稍后的命令grep
或head
其他命令。
举一个简单的例子:搜索dmesg
给定的字符串并且只想要最后 5 个出现的字符串。
我会这样做:
dmesg | grep -i USB | tail -n 5
Run Code Online (Sandbox Code Playgroud)
但如果我想更改搜索词或我正在搜索的内容或来源,我会等待光标回溯到该行的相关部分。我想将其移至行尾,以便上面的示例可以表示为(我知道这是不正确的):
tail -n 5 < dmesg | grep -i USB
(然后我可以搜索sda
)
正如我所说,这是一个粗略的例子,表明了我想做的事情,但实际上并不是我想做的事情,即。这不是关于anddmesg
的使用,而是如何在这些程序之间进行交互,并将“变量”放在末尾。grep
tail
这可以进一步以获取 DNS 查询的查找时间为例:
dig google.com | grep msec
(让我们移动google.com
到最后,以便我可以测试另一个域)通过
grep msec < dig google.com
再次,糟糕的例子。我更多地讨论的是当我在多个程序之间有输入/输出流动时
我承认我对管道和重定向只有基本的了解,可以总结为:
|
)使用stdout
一个程序的输入到stdin
另一个程序的 输入>
)获取stdout
一个程序的并将其输入到一个文件中(旁白:除了我能想到的唯一明显的程序之外,它是否可以重定向到其他地方,> /dev/null
或者> /dev/sda …
我已经使用md5deep
了很长时间,超过10年。它对我来说是一个自然的“去”工具,因为它提供了递归、匹配和缺失模式,甚至是我喜欢的分类。
我知道并使用过较新的工具,hashdeep
并且都至少安装在一台机器上。
我注意到我在不同的盒子上有不同的版本,直到我昨天安装了其他东西并注意到它md5deep
被“阻止”时才考虑太多。不确定原因和快速研究没有发现依赖问题,所以我升级了它。结果hashdeep
被安装了(没问题,就像我说的,我已经使用了它)但是虽然它“出现” md5deep 没有被删除,但它确实有这种感觉。
me@home:~$ sudo apt-get install md5deep
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
hashdeep
The following NEW packages will be installed:
hashdeep
The following packages will be upgraded:
md5deep
1 to upgrade, 1 to newly install, 0 to remove and 105 not to upgrade.
Need to get 0 B/119 kB of archives.
After this operation, 1,123 kB …
Run Code Online (Sandbox Code Playgroud)