我需要区分(并合并)两个目录(实际上是相同的内容,在一组文件中插入了一些额外的行)。唉,我尝试过的所有差异程序(kompare、diffmerge、kdiff3、diffuse、xxdiff、)都不能很好地显示差异(来自 intellij idea 的屏幕截图);或仅限于差异文件(在这种情况下,我没有检查它们是否做得更好)。这两个目录是:A和B。
你能推荐一个好的 diff 程序来解决这个问题(强烈推荐 GUI,必须免费使用)?
我的 Linux NAS 上有名称相同的杂项文件夹,但大小写除外,如下所示:
这在 Linux 上是可以的,即使不是可取的,但是因为这是在为 Windows PC 提供服务的 NAS 上,所以客户端 PC 会感到困惑,并且实际上只显示其中一个文件夹的内容,尽管显示了所有变体......
有这么多,我想自动将这些文件夹合并在一起。
我们最终得到的大小写实际上是无关紧要的,尽管“每个单词的首字母大写”的格式会更受欢迎,但如果可能的话,最终目标是每个文件夹名称中只有一个。
(注意:我知道这些文件夹中包含的文件名也可能存在冲突,但经过讨论,我愿意冒可能存在具有不同内容的同名文件的风险,仅仅是因为目前很多的内容甚至都不容易访问!)
是否有任何现成的 CLI 工具(或 BASH 脚本)来执行此操作?
我有以下两个变量: $var1 具有类似的值
ABC
XYZ
SDF
和 $var 2 具有类似的值
SDF
SGDGH
hfg
我想要像这样的输出
ABC
XYZ
SDF
SDF
SGDGH
hfg
我有以下脚本,我想将 file_import_2 和 file_import_3 的值合并为一个。
file_import_2=""
file_import_3=""
for DataBase in $(< "$1"); do
file_import_1=`grep -iw "CRQ_DI_PROD_$DataBase" "$Import_List_File" | grep -i prod`;
if [[ "$file_import_1" = GDH_* ]]; then
file_import_2=$file_import_1
fi
if [[ "$file_import_1" != GDH_* ]]; then
file_import_3=$DataBase
fi
var3=$(printf '%s\n%s\n' "$file_import_2" "$file_import_3")
echo $var3
done
我传递给脚本的文件和 Import_List_File 各有 4 个值
FARP_DATA_111
TRIN_STAGING
DBH
PRS
使用 print f 解决方案,输出为:
CRQ_DI_PROD_FARP_DATA_111
CRQ_DI_PROD_TRIN_STAGING
CRQ_DI_PROD_TRIN_STAGING DBH
CRQ_DI_PROD_TRIN_STAGING PRS
我正在对一组连接的索引文件进行唯一排序,其中第一列有时会在每个索引之间更改,第二列将是键值(实际上是十六进制地址)。每个 indexN 文件迭代记录自上一次以来更改的地址——如果地址 0xaa11 存在于 index3 中,则在合并+排序的输出中,它应该替换来自 index1 和 index2 的 0xaa11 地址引用。
问题是,如果我只是按特定顺序将每个源索引传输到管道,我能否使用 GNU 之类的工具可靠地进行这种类型的合并?sort
sort -u
例如,管道索引从最新到最旧:
cat index3 index2 index1 | sort -u -k 2,2
当我对此进行测试时,它似乎保留了 index3 中包含也出现在 index2 和 index1 中的地址的行,同时删除了来自 index2 和 index1 的那些重复引用。
但情况会一直如此吗?手册页对此sort
含糊不清:
-u --unique output only the first of an equal run
我对 GNU 排序的算法知之甚少,无法预测具有匹配键的行是否总是按其源文件连接的相同顺序排序(例如,它们出现在源流中的顺序)。但我确实知道排序算法并不总是以线性方式工作。这就是为什么我正在寻找澄清文档似乎暗示的内容。
我有一个关于 unix 中的 awk 命令的问题,用于合并具有共同值的多个表
选项卡1
Geneid Chr Start End Strand Length Sample_1
ENSG00000278267 1 17369 17436 - 68 0
ENSG00000243485 1;1;1 29554;30267;30976 30039;30667;31109 +;+;+ 1021 0
选项卡 2
Geneid Chr Start End Strand Length Sample_2
ENSG00000278267 1 17369 17436 - 68 0
ENSG00000243485 1;1;1 29554;30267;30976 30039;30667;31109 +;+;+ 1021 0
选项卡 3
Geneid Chr Start End Strand Length Sample_3
ENSG00000278267 1 17369 17436 - 68 0
ENSG00000243485 1;1;1 29554;30267;30976 30039;30667;31109 +;+;+ 1021 0
如您所见,这些表中的 Geneid 相似,我想将这些文件合并为 1 与 GeneID 列和“Sample_n”列
awk 'NR==FNR {h[$1] = $7; next} {print $1,$7,h[$1]}' Sample_1.txt Sample_2.txt | head
如果我没有遗漏什么意思:NR==FNR,第一个文件是输出的模板 {h[$1] = $7; next} h 包含文件 1 的 GeneID 与第 7 列中的值相关联
这适用于 2 个文件,但不适用于 3 个或更多
Geneid Sample_1 Sample_2
ENSG00000278267 0 0
ENSG00000243485 0 0
我查看了这个网站,人们发布了所有代码,但我不太了解命令,所以有人知道如何合并这些文件并解释命令中的参数吗?
我希望 Git 在我合并签名或带注释的标签时创建合并提交,但它会快进分支指针。我在随附的 openSUSE Tumbleweed 上使用 Git 2.17.0 版本。
根据它的手册页,git-merge(1)
在合并签名/注释标签的情况下应该创建一个合并提交:
--no-ff即使合并解析为快进,也创建合并提交。这是合并未存储在 refs/tags/ 层次结构中的自然位置的带注释(可能还有签名)标签时的默认行为。
我发出的命令序列如下所示:
git init foobar
cd foobar
git commit --allow-empty -m 'Empty root commit'
git checkout -b feature
git commit --allow-empty -m 'Feature one commit ahead of master'
git tag -a -m 'Feature ready for non fast-forward merge' ready-to-merge-feature
git checkout master
git merge ready-to-merge-feature
不幸且出乎意料的是,注释标签的合并ready-to-merge-feature
确实会导致快进合并而不是创建合并提交。我在使用带符号而不是带注释的标签时观察到了同样的意外行为。
我的假设是错误的吗?难道我做错了什么?什么是解决方案?